作者:111222 | 来源:互联网 | 2024-12-20 20:43
篇首语:本文由编程笔记#小编为大家整理,主要介绍了重温C++相关的知识,希望对你有一定的参考价值。 C++ 1 子函数可以把定义放在MAIN函数前, 实现在MAIN函数后
篇首语:本文由编程笔记#小编为大家整理,主要介绍了重温C++相关的知识,希望对你有一定的参考价值。
C++
1 子函数可以把定义放在MAIN函数前, 实现在MAIN函数后
2 函数之间的值传和地址传方式
call()
vector<string> name;
string lastname
who_is(&name,&lastname);
cout<<name<<endl;
void who_is(vector<string> *p_firstname,string *p_lastname)
string l_v_str_firstname("曾");
string l_v_str_lastname("大侠");
*p_lastname&#61;l_v_str_firstname;
p_firstname->push_back(l_v_str_firstname);
调用函数call把本地变量的name地址传给被调用函数who_is
被调函数声明为指针 string *p_name
给指针赋值 *p_lastname&#61;l_v_str_firstname;
给指针赋地址 p_name&#61;&l_v_str_firstname
被调函数who_is 不能把函数内部的变量传到外面去&#xff0c;因为函数调用完后就被清除了。
这样函数内部要把工作结果返回出去&#xff0c;一方面可以通过RETRUN 可惜只能返回1个。
要多个必须主调函数把外面的变量地址传进来&#xff0c;然后给这个地址空间赋值&#xff0c;真实的值。
上面指针比较容易让人混淆&#xff0c;主要是跟普通变量相比。
很容易给指针赋值写成了 p_name&#61;l_v_str_firstname。这实际上把指针里面的地值替换成新的内存地址。
对指针是4个字节32位的存储空间&#xff0c;里面只存放内存地址。
另外个混淆的地方就是指针定义和指针使用 string *p 定义指针 *p&#61; 取指针里面的值。
另还有个引用传值
call()
vector<string> name;
string lastname
who_is(name,lastname);
cout<<name<<endl;
void who_is(vector<string> &p_firstname,string &p_lastname)
string l_v_str_firstname("曾");
string l_v_str_lastname("大侠");
p_lastname&#61;l_v_str_firstname;
p_firstname.push_back(l_v_str_firstname);
这里主调函数不用&方式把地址传进去&#xff0c;而被调函数通过&方式声明使用主调函数变量的地址
在被调函数内部直接使用该变量&#xff0c;声明形式的变量
p_lastname&#61;l_v_str_firstname;
p_firstname.push_back(l_v_str_firstname);
直接赋值不用*来表示&#xff0c;访问成员函数不用-> 而代替的是.
这或许是C&#43;&#43;避免让大家混淆吧&#xff01;
这种方式干净简单不乱&#xff0c;建议使用。如果编辑存C就无法使用。
大家对&#xff23;或者&#xff23;&#xff0b;&#xff0b;感兴趣&#xff0c;可以在自己的虚拟机上编程一下
linux c/c&#43;&#43; hello word
https://blog.csdn.net/ZengMuAnSha/article/details/5826949
这篇小仙的博客老早以前在LINUX下写的。
Linux下C&#43;&#43;连接oracle数据库 OCCI 接口
https://blog.csdn.net/ZengMuAnSha/article/details/51438251
这篇也是在LINUX下使用ORACLE公司免费的IDE NETBEAN8 C&#43;&#43;版本
然后再使用ORACLE公司提供的OCCI库&#xff0c;开发个ORACLE数据库的DEMO
最主要的是NETBEAN8可以支持中文版。有IDE支持很多配置易如反掌&#xff01;
文中的11.2.0.4 SDK下载地址早已失效了
SDK下载地址:
https://download.oracle.com/otn/linux/instantclient/11204/instantclient-sdk-linux.x64-11.2.0.4.0.zip?AuthParam&#61;1575559586_5112f43f5a3f136e263c2afa58b8d757
BAISC:
https://download.oracle.com/otn_software/linux/instantclient/195000/instantclient-basic-linux.x64-19.5.0.0.0dbru.zip
这两个就是OCCI库,都是免费下载的. 不过你只需要注册免费的ORACLE账号就行.
使用IDE在LINUX下编程,自然需要图形界面,LINUX下的XWINDOX系统,还有个GNOME桌面系统. 一般情况下我装系统都会带图形支持,然后INIT3切换到字符界面上. 我使用XMAGNER 的XPASSVIE 什么鬼的工具,可把NETBEAN导到WIN7在操作.
我百度网盘共享一个NETBEAN 不确定是否支持C&#43;&#43;,你可以直接上ORACLE官方下.
https://pan.baidu.com/s/16vvlRqjBZkbYCRXKK5IVRg 提取码:l39j
当然你不想整那么多的话,可以直接在虚拟机中的Linux图形界面编程,可以不用XSHELL.
当然NETBEAN 8需要JDK8
我使用ORACLE用户在LINUX下安装这两个家伙的. 另外环境设置下参数
export PATH&#61;$ORACLE_BASE/OPatch:$ORACLE_HOME/bin:$CRS_HOME/bin:$PATH:/sbin
export LD_LIBRARY_PATH&#61;$ORACLE_HOME/lib:$LD_LIBRARY_PATH
PATH最好是把JDK的路径放在最前面.因为虚拟机上的ORACLE也带JAVA.
ORACLE 11G 一般带JAVA7 你在LINUX下java -version 看下是否正确。
LD_LIBRARY_PATH 是库路径&#xff0c;主要调试的时候需要知道它在哪里。
这个主要是OCCI库的BASIC这个包解压的路径。
好了作为ODBA 你除了会PL/SQL,SHELL外 你还会C&#43;&#43; 你可看起来很装逼的语言&#xff1a;
下面是开发个类似ANSIBEL批量执行SQL在30台数据库服务器上
#include
#include <iostream>
#include
#include
#include
using namespace std;
using namespace oracle::occi;
void Conn_Db_Exec(string user,string pwd,string conn,string sql);
void read_db_conf(vector<string> &p_v_str_user,vector<string> &p_v_str_pwd, vector<string> &p_v_str_conn, string s_classA,string s_classB,string s_classC,string s_dbname);
void read_sql_conf(string &psqltext,string psql_id);
int main(int argc, char** argv)
vector<string> m_v_user;
vector<string> m_v_pwd;
vector<string> m_v_conn;
string m_s_sql_text;
string m_s_sql_id;
string m_s_classA;
string m_s_classB;
string m_s_classC;
string m_s_dbname;
for (int i&#61;0;i<argc; i&#43;&#43;)
cout<<"Your input Parameter:"<<endl;
cout<<argv[i]<<endl;
if (argc>0)
m_s_sql_id &#61;argv[0];
m_s_classA&#61;argv[1];
m_s_classB&#61;argv[2];
m_s_classC&#61;argv[3];
if (argc&#61;&#61;5)
m_s_dbname&#61;argv[4];
else
m_s_dbname.clear();
read_db_conf(m_v_user,m_v_pwd,m_v_conn,m_s_classA,m_s_classB,m_s_classC,m_s_dbname);
read_sql_conf(m_s_sql_text,m_s_sql_id);
else cout<<"You not innput parameter"<<endl;
if (m_s_sql_text.size() >0 )
if (m_v_user.size() >0)
if(m_v_user.size()&#61;&#61;m_v_pwd.size() && m_v_user.size()&#61;&#61;m_v_conn.size())
for (int i&#61;0;i<m_v_user.size();i&#43;&#43;)
cout<<m_v_user[i]<<endl;
cout<<m_v_pwd[i]<<endl;
cout<<m_v_conn[i]<<endl;
else cout<<"This Database Number is not as! user.size !&#61; pwd.size !&#61;conn.size" <<endl;
else cout<<"Not Find any database info!"<<endl;
else cout<<"Not Find any SQL TEXT info!"<<endl;
return 0;
void read_db_conf(vector<string> &p_v_str_user,vector<string> &p_v_str_pwd,
vector<string> &p_v_str_conn,
string s_classA,string s_classB,string s_classC,string s_dbname)
string str_user("scott");
string str_pwd("123456");
string str_conn("192.168.2.21:1521/SHARKDB");
p_v_str_user.push_back(str_user);
p_v_str_pwd.push_back(str_pwd);
p_v_str_conn.push_back(str_conn);
str_user&#61;"system";
str_pwd&#61;"123456";
str_conn&#61;"192.168.2.21:1521/SHARKDB";
p_v_str_user.push_back(str_user);
p_v_str_pwd.push_back(str_pwd);
p_v_str_conn.push_back(str_conn);
void read_sql_conf(string &psqltext,string psql_id)
string l_str_sqltext;
l_str_sqltext&#61;"select sysdate from dual";
psqltext&#61;l_str_sqltext;
void Conn_Db_Exec(string user,string pwd,string strconn,string sql)
Environment *env;
Connection *conn;
Statement *stmt;
ResultSet *rset;
string str_user&#61;user;
string str_pwd&#61;pwd;
string str_conn&#61;strconn;
string str_sql&#61;sql;
env &#61; Environment::createEnvironment(Environment::OBJECT);
try
conn &#61;env->createConnection(str_user,str_pwd,str_conn);
if(conn!&#61;NULL)
cout<<"Connect Success"<<endl;
else
cout<<"Connect Failed!"<<endl;
stmt&#61;conn->createStatement(str_sql);
rset&#61;stmt->executeQuery();
while(rset->next())
string tr_day&#61;rset->getString(1);
cout<<"This Database date is :"<<tr_day<<endl;
catch(SQLException e)
cout<<e.what()<<endl;
stmt->closeResultSet(rset);
conn->terminateStatement(stmt);
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
stmt->closeResultSet(rset);
conn->terminateStatement(stmt);
env->terminateConnection(conn);
Environment::terminateEnvironment(env);
大家可以在公众号查看本文